package com.gmrz.uap.authmetadata;

import com.gmrz.uap.cfg.SystemConst;
import com.gmrz.uap.common.DbConst;
import com.gmrz.uap.common.ServiceSupport;
import com.gmrz.uap.model.AuthMetadata;
import com.gmrz.uap.model.Policy;
import com.gmrz.uap.user.UserController;
import com.gmrz.uap.util.Identities;
import com.jfinal.aop.Before;
import com.jfinal.plugin.activerecord.Page;
import com.jfinal.plugin.activerecord.tx.Tx;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.List;

public class AuthMetadataService extends ServiceSupport {

    private static final Logger LOG = LoggerFactory.getLogger(UserController.class);

    public static final AuthMetadataService me = new AuthMetadataService();

    /**
     * 保存元数据
     *
     * @param authMetadata 元数据信息
     */
    @Before(Tx.class)
    public boolean saveAuthMetadata(AuthMetadata authMetadata, String tenantid) {
        return authMetadata.save();
    }

    /**
     * 根据页面传过来的条件进行分页查询
     *
     * @param authMetadata 元数据信息
     * @param page         页号
     * @param rows         行数
     * @param sort         排序字段
     * @param order        升序/降序
     * @return　分页结果 Page<AuthMetadata>
     */
    public Page<AuthMetadata> findList4Paginate(AuthMetadata authMetadata, int page, int rows, String sort, String order) {
        return AuthMetadata.dao.findList4Paginate(authMetadata, page, rows, sort, order);
    }

    @Before(Tx.class)
    public boolean remove(String ids) {

        String[] idArr = ids.split(SystemConst._DEFAULT_SEPARATOR_COMMA);

        for (String id : idArr) {

            flag = AuthMetadata.dao.deleteById(id);
            if (!flag) {
                break;
            }
        }
        return flag;
    }

    public List<AuthMetadata> findAll() {
        return AuthMetadata.dao.findAll();
    }


    /**
     * 根据AAID获取元数据信息
     *
     * @param aaid
     * @return
     */
    public AuthMetadata findByAAID(String aaid) {
        return AuthMetadata.dao.findByAAID(aaid);
    }


    public List<AuthMetadata> getAuthMetadataByPolicyId(String policyId) {
        return AuthMetadata.dao.getAuthMetadataByPolicyId(policyId);
    }

    public List<AuthMetadata> getNonAuthMetadataByPolicyId(Policy policy) {
        return AuthMetadata.dao.getNonAuthMetadataByPolicyId(policy);
    }

    /**
     * 检查AAID是否被使用
     *
     * @param metadataId 元数据ID
     * @return boolean 是否被使用
     */
    public boolean checkAaidIsUsing(String metadataId) {
        return AuthMetadata.dao.getAuthMetadataUsingCountByMetadataId(metadataId) > 0;
    }


    /**
     * 检查AAID是否被已经注册使用
     *
     * @param metadataId 元数据ID
     * @return boolean 是否被注册使用
     */
    public boolean checkAaidIsRegisterUsing(String metadataId) {
        return AuthMetadata.dao.getAuthMetadataRegisterUsingCountByMetadataId(metadataId) > 0;
    }
}
